package org.yelongframework.zip.entry;

import org.yelongframework.core.util.function.io.ByteArraySupplier;
import org.yelongframework.lang.Nullable;
import org.yelongframework.util.Assert;

/**
 * 压缩文件项
 * 
 * @since 1.0.0
 */
public abstract class ZipEntry {

	/** 在压缩包内的文件名称（文件全路径，可以通过文件分隔符进行分割） */
	private final String name;

	/** 数据源 */
	@Nullable
	private final ByteArraySupplier dataSource;

	// ==================================================构造器==================================================

	/**
	 * @param name       在压缩包内的文件名称（文件全路径，可以通过文件分隔符进行分割）
	 * @param dataSource 数据源
	 */
	protected ZipEntry(String name, @Nullable ByteArraySupplier dataSource) {
		this.name = Assert.notBlank(name, "name cannot be blank");
		this.dataSource = dataSource;
	}

	// ==================================================名称==================================================

	/**
	 * @return 在压缩包内的文件名称（文件全路径，可以通过文件分隔符进行分割）
	 */
	public String getName() {
		return name;
	}

	// ==================================================类型==================================================

	/**
	 * @return 压缩项类型
	 */
	public abstract ZipEntryType getType();

	/**
	 * @return 是否是文件
	 */
	public boolean isFile() {
		return getType() == ZipEntryType.FILE;
	}

	/**
	 * @return 是否是目录
	 */
	public boolean isDirectory() {
		return getType() == ZipEntryType.DIRECTORY;
	}

	// ==================================================数据源==================================================

	/**
	 * @return 数据源
	 */
	@Nullable
	public ByteArraySupplier getDataSource() {
		return dataSource;
	}

}
